/**
 * 遍历表单中所有的控件
 * @param list 表单控件集合
 * @param callback 回调函数，返回true时结束循环，可用于找控件;
 * callback
 *  参数一：返回当前循环到的控件配置，
 *  参数二：当前控件所属类型：main主表，subTable子表,oneTable一对一子表
 */
let loopControl = (list,callback) =>{
    //循环遍历表单里面的控件，子表与一对一子表直接返回不做深层次的循环
    //当callback返回true的时候跳出循环
    let isTrue = false ;
    let loopFn =(list)=>{
        for (let item of list){
            if(isTrue){ return }
            if(item.type === 'grid'){
                item.children.forEach(gridItem=>loopFn(gridItem.children))
            }else if(item.type === 'table'){
                item.trs.forEach(tr=>{
                    tr.tds.forEach(td=>{
                        loopFn(td.children)
                    })
                })
            }else if(['tabs','collapse'].includes(item.type)){
                item.children.forEach(tabs=>loopFn(tabs.list))
            } else if(['subTable','oneTable'].includes(item.type)){
                if(callback(item,item.type)){
                    isTrue = true
                    return
                }
            }else {
                if(callback(item,'main')){
                    isTrue = true
                    return;
                }
            }
        }
    }
    loopFn(list)
}
export default loopControl
